// 引入 events 模块中的 EventEmitter
const EventEmitter = require('events');

// 定义 Dog 构造函数，继承自 EventEmitter
function Dog(name, energy) {
  // 继承 EventEmitter 的属性和方法
  EventEmitter.call(this);
  // 定义 Dog 的 name 和 energy 属性
  this.name = name;
  this.energy = energy;
  // 用于存储定时器的标识
  this.timer = null;
}

// 让 Dog 的原型继承自 EventEmitter 的原型
Dog.prototype = Object.create(EventEmitter.prototype);
// 修复构造函数指向
Dog.prototype.constructor = Dog;

// 定义 Dog 原型上的 bark 方法
Dog.prototype.bark = function () {
  // 保存 this 指向，方便在定时器回调中使用
  const self = this;
  // 每隔 1 秒执行一次
  this.timer = setInterval(() => {
    if (self.energy > 0) {
      // 输出 bark 信息，同时 energy 减 1
      console.log(`${self.name} barked! energy: ${self.energy}`);
      self.energy--;
    } else {
      // 当 energy 为 0 时，清除定时器，停止 bark
      clearInterval(self.timer);
    }
  }, 1000);
};

// 导出 Dog 构造函数
module.exports = Dog;